﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using Entidades;
using Web.Helpers;
using Web.Helpers.jqGridHelpers;
using Common;
using Controladores;
using Entidades.jSON;
using Newtonsoft.Json;
using System.Text;

namespace Web.Pages
{
    public partial class Facturacion : BasePage
    {
        protected new void Page_Load(object sender, EventArgs e)
        {
            base.Page_Load(sender, e);

            if (!Page.IsPostBack)
            {
                this.CargarPagina();
            }
        }

        #region Private Methods

        private void CargarPagina()
        {
            //var estadosGuion = EstadosGuion.ObtenerTodos();
            //this.BindSelectList(this.selEstadoGuion, estadosGuion, "Id", "Texto");

            //var estadosPago = EstadosPago.ObtenerTodos();
            //    estadosPago = estadosPago.Except(estadosPago.Where(x => x.Id == WellKnownKeys.Entities.EstadosPago.PENDIENTE_DE_PAGO.Id)).ToList();
            //this.BindSelectList(this.selEstadoPago, estadosPago, "Id", "Texto");

            //var mediosPago = MediosPago.ObtenerTodos();
            //this.BindSelectList(this.selMedioPago, mediosPago, "Id", "Texto");
        }

        private static IEnumerable<object[]> BuildDataRows(IList<Entidades.Calculado.Facturacion> data)
        {
            var lista = from Entidades.Calculado.Facturacion item in data
                        select new object[]
                            {
                                item.Id,
                                item.IdGuion,
                                item.IdProyecto,
                                item.Episodio,
                                BasePage.CrearLink(WellKnownKeys.Grid.Actions.VER + "Liquidaciones", item.IdGuion, String.Format("Ep. {0} - \"{1}\"", item.Episodio, item.Titulo)),
                                item.Pagos,
                                item.Loops,
                                item.Importe,
                                item.FechaCreacion,
                                item.IdEstadoGuion,
                                item.EstadoGuion,
                                item.IdEstadoPago,
                                item.EstadoPago,
                                item.FechaPago.IsNotNull() ? item.FechaPago : new DateTime?(),
                                item.IdMedioPago,
                                item.MedioPago
                            };
            return lista;
        }

        #endregion

        #region Web Methods

        [WebMethod]
        public static string obtenerFacturacion(int pageSize, int currentPage, string sortColumn, string sortOrder, string search, string searchFilter, string colModel, bool isExport, string parameters)
        {
            var jSON = string.Empty;
            try
            {
                var idProyecto = Convert.ToInt32(parameters);
                var parametros = GridDataHelper.GetParameters(searchFilter, colModel);
                    parametros.AddParameter("id_proyecto", idProyecto);
                var jqGridData = new Grid<Entidades.Calculado.Facturacion>().GetGridData(WellKnownKeys.StoredProcedures.Facturacion_GET, parametros.List, currentPage, pageSize, BuildDataRows);
                jSON = Formatter.JSON<jqGridData>.Serialize(jqGridData);
            }
            catch (Exception ex)
            {
                LogError(ex);
                throw;
            }
            return jSON;
        }

        #endregion
    }
}